其他
一道囚徒问题
前两天看到一条新闻:
@王威廉: 很多美国人已经意识到,计算机编程和相关技术以后将会是人类的一项核心技能。图为美国圣昆丁监狱的囚犯积极学习编程技能。
该项目负责人说,从前67%被释放的囚犯都会在3年内二进宫,但是我们编程项目出来的囚犯没有再返回监狱的例子,而且还有不少去做了程序员。
既然犯人们都开始学编程了,咱也不能闲着啊,还是要不断提高自己的姿势水平。
于是,我参考以前看到的某个数学题,胡乱编了道有关囚徒的编程问题:
在某个虚构的监狱里,关押着 n 个囚犯。此监狱偶尔会有 1 个名额的假释机会,但决定名额的方式比较奇葩:
所有囚犯排成一个圈,以某个人为起点从 1 开始报数,依次递增。所有报到奇数的犯人立刻离开,剩下的人继续往下报数。最后剩下的一个犯人获得假释。
那么,站在哪个位置,才能保证一站到底?
想象一下,你现在是一个有台装了 Python 的电脑且会编程的囚犯,如何实现一个函数 lucky(n),让它返回这个幸运数字。
动手试试,我会在本周日给出解答。
Crossin的编程教室
微信ID:crossincode
论坛:http://bbs.crossincode.com
QQ群:465369080
点击左下角“阅读原文”,查看更多学习资源